package main

import "fmt"

// 在一些需要使用到队列的场景中， 会将slice当做对队列来用。
// 比方说广度优先遍历，需要使用一个队列

type Node struct {
	val         int // 定义为小写了
	left, right *Node
}

func bfs(root *Node) {
	// 1. 定义队列
	d := make([]*Node, 0)
	d = append(d, root)
	// 2. 广度优先遍历
	for len(d) > 0 {
		// 3. 从队列中取元素
		node := d[0]
		d = d[1:]
		// 4. 对当前节点进行操作
		fmt.Println(node.val)
		// 5. 添加子节点到队列
		if node.left != nil {
			d = append(d, node.left)
		}
		if node.right != nil {
			d = append(d, node.right)
		}
	}

}
